//介绍函数的参数
//函数的参数，我们可以理解为数学函数里的未知数 x，它只是占了一个式子里的位置，在等待数据入座
//格式:类型 函数名称(参数类型 参数1，参数类型 参数2){}
//eg. int add(int a,int *b){}
#include <stdio.h>
int add(int x,int y){
	return(x+y);
}

/*int woo(int *x){
	(*x)++;
}*///函数操作不需要返回值！所以函数类型应该改为 void才对

void woo(int *x){
	(*x)++;
}

int main()
{
	int add(int x,int y);
	int a,b;
	printf("please input two numbers:\n");
	scanf("%d %d",&a,&b);
	int q=add(2,4);//函数参数可以是常量
	int w=add(a,b);//函数参数可以是变量（最好已知数值，不然就会电脑会胡乱取值进行计算）
	int c=add(a+3,b);//函数参数还可以是表达式
	int d=add(add(a,b),b);//没错！函数的参数还能以函数充当
	printf("%d\n%d\n%d\n%d\n",q,w,c,d);
	
//以上是传值调用
//函数的调用分为传值调用和传址调用两种方式
//顾名思义，传值调用就是只传参数的值，而传址调用则是传指针
//知道了指针，根据指针的特点，我们可以知道通过指针我们可以找到它的指向对象（具体还有什么联系还不清楚）
//即传址调用，可以让函数参数和函数产生联系，函数参数发生改变也会影响原始数值，因为他们的指针指向同一块内存空间
//而传值调用，则相互之间无任何影响，函数参数相当于原始值的副本(临时拷贝)，即copy了一份过去，计算完把结果传回来就可以了（自动销毁副本）

//一下是传址调用的示例
/*	int *p=1;*///错误的写法，指针变量是用来存地址的，不是存数值，指针初始化也是将地址赋给它
	int o=1;
/*	int *p;
	p=&o;*///感觉这样也不是很好，指针p没有初始化
	int *p=&o;//指针初始化
	woo(p);//传 o的地址给函数 woo
	printf("%d",o);//2，o的数值在函数被改变（this is传址调用）
	return 0;
}